package com.algorithm.code.list;

/**
 * @program: study
 * @className: BaseList
 * @description: TODO
 * @author: kukuxiahuni
 * @create: 2020-01-19 11:40
 * @version: v1.0
 **/
public interface BaseList<T> {

    /**
     * 功能描述: 删除第一个元素
     * @param:
     * @return:
     * @auther: kukuxiahuni
     * @date: 2020/1/19 11:43 上午
     * @modify_auther: kukuxiahuni
     * @modify_time: 2020/1/19 11:43 上午
     **/
    void deleteFirst(T value);

    /**
     * 功能描述: 添加一个元素
     * @param:
     * @return:
     * @auther: kukuxiahuni
     * @date: 2020/1/19 11:43 上午
     * @modify_auther: kukuxiahuni
     * @modify_time: 2020/1/19 11:43 上午
     **/
    void add(T value);

    /**
     * 功能描述: 链表是否为空
     * @param:
     * @return:
     * @auther: kukuxiahuni
     * @date: 2020/1/19 11:43 上午
     * @modify_auther: kukuxiahuni
     * @modify_time: 2020/1/19 11:43 上午
     **/
    boolean isEmpty();

    /**
     * 功能描述: 打印所有节点
     * @param:
     * @return:
     * @auther: kukuxiahuni
     * @date: 2020/1/21 10:47 上午
     * @modify_auther: kukuxiahuni
     * @modify_time: 2020/1/21 10:47 上午
     **/
    void printAll();

    /**
     * 功能描述: 单链表节点
     *
     * @param:
     * @return:
     * @auther: kukuxiahuni
     * @date: 2020/1/19 11:12 上午
     * @modify_auther: kukuxiahuni
     * @modify_time: 2020/1/19 11:12 上午
     **/
    class Node<T> {

        T value;
        Node<T> next;
        Node<T> pre;

        public Node(T value, Node<T> next) {
            this.value = value;
            this.next = next;
        }

        public Node(T value, Node<T> pre, Node<T> next) {
            this.value = value;
            this.next = next;
            this.pre = pre;
        }

        @Override
        public String toString() {
            return "Node{" +
                    "value=" + value +
                    ", next=" + next +
                    '}';
        }
    }
}
